﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Beeldbankmvc.Code;

namespace Beeldbankmvc.Models
{
    public class availableTypes
    {
        public string Name { get; set; }
    }
    public class availableFormats
    {
        public string Name { get; set; }
    }
    public class totalPrice
    {
        public double price { get; set; }
    }

    public class PriceInfoRepository
    {
        BeeldbankLinqDataContext db = new BeeldbankLinqDataContext();

        public BeeldbankLinqDataContext GetDataContext()
        {
            return db;
        }


        public IQueryable<BEELDBANK_PRIJSINFO> FindAllSorted()
        {
            return from p in FindAll()
                   orderby p.HoofdNummer, p.SubNummer
                   select p;
        }

        public IQueryable<BEELDBANK_PRIJSINFO> FindAll()
        {
            return db.BEELDBANK_PRIJSINFOs;
        }


        public IQueryable<availableTypes> FindAvailableTypes(int mediaType)
        {
            return from b in db.BEELDBANK_PRIJSINFOs
                   where b.MediaTypeId == mediaType
                   group b by b.Type into g
                   select new availableTypes { Name = g.Key };
        }

        public IQueryable<availableFormats> FindAvailableFormats(int mediaType, String AvailableType)
        {
            return from b in db.BEELDBANK_PRIJSINFOs
                   where b.MediaTypeId == mediaType
                   where b.Type == AvailableType
                   group b by b.Formaat into g
                   let subNummer = g.Sum(x => x.SubNummer)
                   orderby subNummer
                   select new availableFormats { Name = g.Key };
        }

        public totalPrice totalPrice(int mediaType, String AvailableType, String availableFormats, int aantal)
        {
            var prices = from b in db.BEELDBANK_PRIJSINFOs
                         where b.MediaTypeId == mediaType
                         where b.Type == AvailableType
                         where b.Formaat == availableFormats
                         group b by b.Prijs into g
                         select new totalPrice { price = (g.Key * aantal) };

            if (LinqHelper.IsEmpty(prices))
            {
                return new totalPrice { price = 0 };
            }
            else
            {
                return prices.Single();
            }
        }

        public BEELDBANK_PRIJSINFO FindOne(int id)
        {
            return db.BEELDBANK_PRIJSINFOs.SingleOrDefault(m => m.Id == id);
        }

        public void Add(BEELDBANK_PRIJSINFO priceinfo)
        {
            db.BEELDBANK_PRIJSINFOs.InsertOnSubmit(priceinfo);
        }

        public void Delete(BEELDBANK_PRIJSINFO priceinfo)
        {
            db.BEELDBANK_PRIJSINFOs.DeleteOnSubmit(priceinfo);
        }

        public void Save()
        {
            db.SubmitChanges();
        }
    }
}